import java.util.Scanner;

/**
 * Created With IntelliJ IDEA
 * Description:PTA:三元组顺序表表示的稀疏矩阵转置运算Ⅰ
 * User: DELL
 * Data: 2022-11-22
 * Time: 14:50
 */
//题目要求
//输入格式:
//        输入第1行为矩阵行数m、列数n及非零元素个数t。
//        按行优先顺序依次输入t行，每行3个数，分别表示非零元素的行标、列标和值。
//输出格式:
//        输出转置后的三元组顺序表结果，每行输出非零元素的行标、列标和值，行标、列标和值之间用空格分隔，共t行。
//    输入样例:
//            3 4 3
//            0 1 -5
//            1 0 1
//            2 2 2
//    输出样例:
//            0 1 1
//            1 0 -5
//            2 2 2

public class TestDemo {
    public static void main(String[] args) {
        int m = 0;
        int n = 0;
        int t = 0;
        Scanner scanner = new Scanner(System.in);
        m = scanner.nextInt();
        n = scanner.nextInt();
        t = scanner.nextInt();
        int[][] src = new int[t][3];
        for (int i = 0; i < t; i++) {
            src[i][0] = scanner.nextInt();
            src[i][1] = scanner.nextInt();
            src[i][2] = scanner.nextInt();
        }
        int[][] dst = new int[t][3];
        //转置稀疏矩阵
        //tmp数组先记录每一个列号出现的次数
        int[] tmp = new int[n];
        for (int i = 0; i < t; i++) {
            tmp[src[i][1]]++;
        }
        //将tmp数组转化，转化后tmp[i]表示为转置后的矩阵的第i行的第一个非零元素在dst中的行数
        int buf = tmp[0];
        tmp[0] = 0;
        for (int i = 1; i < n; i++) {
            int buf2 = tmp[i];
            tmp[i] = tmp[i-1] + buf;
            buf = buf2;
        }
        //根据src矩阵，写出转置后的dst矩阵
        for (int i = 0; i < t; i++) {
            int col = src[i][1];
            int row = tmp[col];
            tmp[col]++;
            dst[row][0] = src[i][1];
            dst[row][1] = src[i][0];
            dst[row][2] = src[i][2];
        }

        for (int i = 0; i < t; i++) {
            System.out.println(dst[i][0] + " " + dst[i][1] + " " + dst[i][2]);
        }
        return;
    }
}
